package LeetCodeTest.PrimaryAlgorithmTest.String;

import java.util.ArrayList;
import java.util.List;
import java.util.Stack;

public class Reverse {
    /**
     * 整数反转
     * 给你一个 32 位的有符号整数 x ，返回将 x 中的数字部分反转后的结果。
     * 如果反转后整数超过 32 位的有符号整数的范围[−2^31, (2^31)− 1] ，就返回 0。
     * 假设环境不允许存储 64 位整数（有符号或无符号）。
     * 示例 1：
     * 输入：x = 123
     * 输出：321
     * 示例 2：
     * 输入：x = -123
     * 输出：-321
     * 示例 3：
     * 输入：x = 120
     * 输出：21
     * 示例 4：
     * 输入：x = 0
     * 输出：0
     *
     * 作者：力扣 (LeetCode)
     * 链接：https://leetcode-cn.com/leetbook/read/top-interview-questions-easy/xnx13t/
     * 来源：力扣（LeetCode）
     * 著作权归作者所有。商业转载请联系作者获得授权，非商业转载请注明出处。
     *
     * 思路
     * 1. 取绝对值，用一个boolean标签表示符号。
     * 2. 取出每一位放入stack              O(n)
     * 3. stack pop重新组成一个数          O(n)
     * 复杂度较高，不推荐
     *
     *
     * 一次遍历，将原先各位翻转，类似于栈操作，不需要真的用栈
     */
    public static void main(String[] args) {
        int x = -2147483648;
        int reverse = reverse(x);
        System.out.println(reverse);
    }

    public static int reverse(int x) {
        long res = 0;
        while (x != 0){
            res = res * 10 + x % 10;
            x/=10;
        }
        return (int) res == res ? (int) res : 0;
    }

























//    public static int reverse(int x) {
//        long res = 0;
//        while (x != 0) {
//            res = res * 10 + x % 10;
//            x /= 10;
//        }
//        return (int) res == res ? (int) res : 0;
//    }
}
